package TestSparkConversionOperator;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;

import java.util.Arrays;
import java.util.List;

public class SparkFilter {
    /**
     * 用于筛选出满足特定条件的元素，并返回一个新的RDD。
     * 参数：Function<T, Boolean>，该接口是函数式接口，T是它的call方法的形参类型，和RDD的元素类型一致，Boolean是call方法的返回值类型
     * 返回值：一个新的RDD对象。
     * @param args
     */
    public static void main(String[] args) {
        SparkConf sparkConf = new SparkConf().setAppName("Filter").setMaster("local");

        JavaSparkContext sc = new JavaSparkContext(sparkConf);

        JavaRDD<Integer> rdd = sc.parallelize(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));

        JavaRDD<Integer> filter = rdd.filter(new Function<Integer, Boolean>() {
            @Override
            public Boolean call(Integer integer) throws Exception {
                return integer % 2 == 0;
            }
        });
        List<Integer> collect = filter.collect();
        for (Integer a : collect){
            System.out.println(a);
        }

    }

}
